Text chyb pres WinInet

Otázka od: Lebeda David

27. 4. 2004 8:59

Ahoj,

nejak jsem rozchodil HTTP komunikaci pres WinInet a ted se zabyvam osetrovanim
chyb. Chtel bych pro zacatek v pripade vyskytu chyby (zjistim kod v
GetLastError)
zobrazit kod a textovy popis.

V Delphi jsem nasel funkci SysErrorMessage, ktera ma prevadet kody chyb na
textovy
popis. To ale nefunguje pro kody knihovny WinInet. V knihovne WinInet jsem
nasel
funkci InternetErrorDialog, ale nedokazal jsem ji primet k tomu, aby mi opravdu
nejaky
dialog zobrazilo - proste probehne a nic se nestane. Tak nevim. Copak to
opravdu
musim delat rucne - tj. pouzit case ErrorCode of a tam pekne z ruky opsat
vsechny
konstanty, ktere najdu v WinInet.pas?

Protoze jsem si vsiml, ze na dotazy ohledne WinInet mi tu prakticky nikdo
neodpovida,
chci se zeptat - to tuto knihovnu opravdu nikdo nepouzivate, nebo je v tom neco
jineho
(know-how apod.)?

Diky

David Lebeda

Odpovedá: Ondrej Kelle

27. 4. 2004 9:17

> nejak jsem rozchodil HTTP komunikaci pres WinInet a ted se
> zabyvam osetrovanim chyb. Chtel bych pro zacatek v pripade
> vyskytu chyby (zjistim kod v GetLastError) zobrazit kod a
> textovy popis.
>
> V Delphi jsem nasel funkci SysErrorMessage, ktera ma prevadet
> kody chyb na textovy popis. To ale nefunguje pro kody
> knihovny WinInet.

Mozes pouzit FormatMessage s flagmi FORMAT_MESSAGE_FROM_HMODULE, vid priklad
TWebConnection.Check v unite SConnect.

HTH
TOndrej

Odpovedá: Karel Pecinka

27. 4. 2004 9:38

Zkus dat cast kodu, ve kterem muze nastat chyba, do bloku try.. except,
asi takhle:

try
  prikaz kde vznikne vyjimka;
except
  on E: Exception do
    ShowMessage(E.Message);
end;


Karel


-----Original Message-----
From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz] On
Behalf Of Lebeda David
Sent: Tuesday, April 27, 2004 9:43 AM
To: delphi-l@clexpert.cz
Subject: Text chyb pres WinInet


Ahoj,

nejak jsem rozchodil HTTP komunikaci pres WinInet a ted se zabyvam
osetrovanim
chyb. Chtel bych pro zacatek v pripade vyskytu chyby (zjistim kod v
GetLastError)
zobrazit kod a textovy popis.

V Delphi jsem nasel funkci SysErrorMessage, ktera ma prevadet kody chyb
na textovy
popis. To ale nefunguje pro kody knihovny WinInet. V knihovne WinInet
jsem nasel
funkci InternetErrorDialog, ale nedokazal jsem ji primet k tomu, aby mi
opravdu nejaky
dialog zobrazilo - proste probehne a nic se nestane. Tak nevim. Copak to
opravdu
musim delat rucne - tj. pouzit case ErrorCode of a tam pekne z ruky
opsat vsechny
konstanty, ktere najdu v WinInet.pas?

Protoze jsem si vsiml, ze na dotazy ohledne WinInet mi tu prakticky
nikdo neodpovida,
chci se zeptat - to tuto knihovnu opravdu nikdo nepouzivate, nebo je v
tom neco jineho
(know-how apod.)?

Diky

David Lebeda



Odpovedá: Karel Kral

27. 4. 2004 12:12

>
> nejak jsem rozchodil HTTP komunikaci pres WinInet a ted se zabyvam
osetrovanim
> chyb. Chtel bych pro zacatek v pripade vyskytu chyby (zjistim kod v
GetLastError)
> zobrazit kod a textovy popis.

Tohle je to, co potrebujes:

resourcestring
  sUnknownWinINetErr = 'Chyba knihovny WinINet RYslo %d';
  sErrIConnAbort = 'P?ipojenY k internetu bylo p?eruUeno';
  sErrIConnReset = 'P?ipojenY k internetu bylo p?eruUeno';

{ System error messages }

function ClearSysMessage(S: string): string;
begin
  while (Length(S) > 0) and (S[Length(S)] in [#0..#32, '.']) do
    SetLength(S, Length(S) - 1);
  Result := S;
end;

// moje doplneni nekterych chybovych kodu
function WinINetCustMessage(ErrorCode: integer): string;
begin
  case ErrorCode of
    ERROR_INTERNET_CONNECTION_ABORTED: Result := sErrIConnAbort;
    ERROR_INTERNET_CONNECTION_RESET: Result := sErrIConnReset;
  else
    Result := Format(sUnknownWinINetErr, [ErrorCode]);
  end; // case
end; // func

function WinINetErrorMessage(ErrorCode: Integer): string;
var
  ModuleHandle: HModule;
  Len: Integer;
  Buffer: array[0..255] of Char;
begin
  ModuleHandle := GetModuleHandle('wininet');
  Len := FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM or
    FORMAT_MESSAGE_ARGUMENT_ARRAY or FORMAT_MESSAGE_FROM_HMODULE,
    pointer(ModuleHandle), ErrorCode, LOCALE_USER_DEFAULT, Buffer,
    SizeOf(Buffer), nil);
  SetString(Result, Buffer, Len);
  Result := ClearSysMessage(Result);
  if Result = '' then
    Result := WinINetCustMessage(ErrorCode);
end;



--
______________________________________________________
Karel Kral, vedouci odd. IT / IT manager
Purus, s.r.o., Cezavy 627, 664 56 Blucina, CZ
Tel: 547 235 000, 602 552 432, Fax: 547 231 203
E-Mail: mailto:kral@purus.cz, WWW: http://www.purus.cz
______________________________________________________